{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * same as rev_tuned, but with the old revised configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/revised_35_run_1/1/AstroCNNModel_revised_20220220_150526',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/2/AstroCNNModel_revised_20220220_151226',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/3/AstroCNNModel_revised_20220220_151926',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/4/AstroCNNModel_revised_20220220_152639',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/5/AstroCNNModel_revised_20220220_153351',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/6/AstroCNNModel_revised_20220220_154105',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/7/AstroCNNModel_revised_20220220_154816',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/8/AstroCNNModel_revised_20220220_155527',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/9/AstroCNNModel_revised_20220220_160235',\n",
       " '/mnt/tess/astronet/checkpoints/revised_35_run_1/10/AstroCNNModel_revised_20220220_160951']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/revised_35_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-35-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v12-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2461 records\n",
      "Running model 2\n",
      "2461 records\n",
      "Running model 3\n",
      "2461 records\n",
      "Running model 4\n",
      "2461 records\n",
      "Running model 5\n",
      "2461 records\n",
      "Running model 6\n",
      "2461 records\n",
      "Running model 7\n",
      "2461 records\n",
      "Running model 8\n",
      "2461 records\n",
      "Running model 9\n",
      "2461 records\n",
      "Running model 10\n",
      "2461 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 1.0\n",
      "Precision: 0.10564811052417716\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "267924099\n",
      "268058755\n",
      "270613669\n",
      "274061306\n",
      "274129865\n",
      "274764311\n",
      "274913960\n",
      "275530995\n",
      "275658545\n",
      "276165770\n",
      "277414027\n",
      "277854181\n",
      "282460772\n",
      "298073824\n",
      "298557393\n",
      "331189568\n",
      "331578319\n",
      "344453376\n",
      "351193224\n",
      "351200720\n",
      "356776209\n",
      "367169035\n",
      "380724118\n",
      "387366495\n",
      "40612890\n",
      "416282321\n",
      "416282724\n",
      "426350650\n",
      "42832478\n",
      "429259165\n",
      "430316024\n",
      "430322052\n",
      "43306175\n",
      "43564749\n",
      "436083994\n",
      "452724091\n",
      "64418963\n",
      "66365216\n",
      "1001239799\n",
      "100525825\n",
      "10657946\n",
      "128340531\n",
      "128503477\n",
      "128627433\n",
      "129488643\n",
      "136651206\n",
      "138078677\n",
      "154214348\n",
      "154656705\n",
      "162333784\n",
      "164266012\n",
      "167464295\n",
      "1883869938\n",
      "188837285\n",
      "190687149\n",
      "194138888\n",
      "1979259478\n",
      "199164436\n",
      "199600304\n",
      "199878093\n",
      "2003757386\n",
      "202442062\n",
      "233839656\n",
      "239639659\n",
      "240573056\n",
      "24860612\n",
      "259770512\n",
      "260976846\n",
      "265150409\n",
      "266794067\n",
      "267486819\n",
      "267662701\n",
      "276705323\n",
      "27689264\n",
      "276921056\n",
      "277170271\n",
      "277420659\n",
      "277848886\n",
      "27804376\n",
      "278555119\n",
      "278910035\n",
      "27962331\n",
      "295206687\n",
      "295305511\n",
      "298972209\n",
      "304969065\n",
      "305308009\n",
      "305873892\n",
      "312821931\n",
      "314461389\n",
      "329710448\n",
      "330131047\n",
      "330470939\n",
      "346340708\n",
      "352156967\n",
      "352271354\n",
      "357302392\n",
      "364567324\n",
      "364968470\n",
      "365411940\n",
      "369484955\n",
      "371070027\n",
      "373909766\n",
      "375257573\n",
      "387568679\n",
      "395164445\n",
      "395986110\n",
      "397657524\n",
      "397679167\n",
      "399873756\n",
      "416911970\n",
      "417057594\n",
      "417208086\n",
      "420953028\n",
      "421371925\n",
      "427856243\n",
      "430852326\n",
      "430856573\n",
      "431416493\n",
      "469465627\n",
      "469793972\n",
      "64591757\n",
      "84302264\n",
      "186334023\n",
      "186483050\n",
      "189582251\n",
      "2041994942\n",
      "233241011\n",
      "233241961\n",
      "243148794\n",
      "24580715\n",
      "252526247\n",
      "252588526\n",
      "252640860\n",
      "252756054\n",
      "25613685\n",
      "26894015\n",
      "28295707\n",
      "293951433\n",
      "301881687\n",
      "318956818\n",
      "364965655\n",
      "367610104\n",
      "400048555\n",
      "409455240\n",
      "431338538\n",
      "435872925\n",
      "436547237\n",
      "437757602\n",
      "440657499\n",
      "53796178\n",
      "60959009\n",
      "11238400\n",
      "115917234\n",
      "116371654\n",
      "116498176\n",
      "117170301\n",
      "117262738\n",
      "117400403\n",
      "117867772\n",
      "12903527\n",
      "129865603\n",
      "186662155\n",
      "192313558\n",
      "192496601\n",
      "192591652\n",
      "196892529\n",
      "196919670\n",
      "198162816\n",
      "198555242\n",
      "203008338\n",
      "20772631\n",
      "22749863\n",
      "240833511\n",
      "240897594\n",
      "240937174\n",
      "240967708\n",
      "241077043\n",
      "241081439\n",
      "241107393\n",
      "245426583\n",
      "249917671\n",
      "249925937\n",
      "249953834\n",
      "250477646\n",
      "250710576\n",
      "250797436\n",
      "250823399\n",
      "250862926\n",
      "250868026\n",
      "251721484\n",
      "256428083\n",
      "265092744\n",
      "268720230\n",
      "269911594\n",
      "270008532\n",
      "270233600\n",
      "279505805\n",
      "285568054\n",
      "286356383\n",
      "28830771\n",
      "29019282\n",
      "299494646\n",
      "301829477\n",
      "302155790\n",
      "302311817\n",
      "302543184\n",
      "308445330\n",
      "309052044\n",
      "309127708\n",
      "309138066\n",
      "309230360\n",
      "312060273\n",
      "312338585\n",
      "312471759\n",
      "312682754\n",
      "320490507\n",
      "320598155\n",
      "326809345\n",
      "327138261\n",
      "327449408\n",
      "327795638\n",
      "332808213\n",
      "332870317\n",
      "34648890\n",
      "347492958\n",
      "348317546\n",
      "348675548\n",
      "354249600\n",
      "359336283\n",
      "364181005\n",
      "366637052\n",
      "367818060\n",
      "370119354\n",
      "374562781\n",
      "374779619\n",
      "381847922\n",
      "385102214\n",
      "389768897\n",
      "396528718\n",
      "400746617\n",
      "403114080\n",
      "403915066\n",
      "408614626\n",
      "410623389\n",
      "410706283\n",
      "410867750\n",
      "416089872\n",
      "417642458\n",
      "423032383\n",
      "423461158\n",
      "424573075\n",
      "427237155\n",
      "427977514\n",
      "436854696\n",
      "441789968\n",
      "444769645\n",
      "445298766\n",
      "445314423\n",
      "445624104\n",
      "450006142\n",
      "456168583\n",
      "458948603\n",
      "468608862\n",
      "470684484\n",
      "470782551\n",
      "50119208\n",
      "50269625\n",
      "50520772\n",
      "61085664\n",
      "622842565\n",
      "73694029\n",
      "77423458\n",
      "77424138\n",
      "77569037\n",
      "90648501\n",
      "94280922\n",
      "94373189\n",
      "94549636\n",
      "122624694\n",
      "122698094\n",
      "127846210\n",
      "187107928\n",
      "20973613\n",
      "21133246\n",
      "233539061\n",
      "235902767\n",
      "239111293\n",
      "2436684\n",
      "251788762\n",
      "252283911\n",
      "259545400\n",
      "259716239\n",
      "259818000\n",
      "260349067\n",
      "261814771\n",
      "266353172\n",
      "269291226\n",
      "269462345\n",
      "275700780\n",
      "280569106\n",
      "280806973\n",
      "286218609\n",
      "297654733\n",
      "308805406\n",
      "311548676\n",
      "316128886\n",
      "316132109\n",
      "316133741\n",
      "316520410\n",
      "321040990\n",
      "334093512\n",
      "334230144\n",
      "349509788\n",
      "354267656\n",
      "367111496\n",
      "368663613\n",
      "369239575\n",
      "373238118\n",
      "373386396\n",
      "373559854\n",
      "384651790\n",
      "390459793\n",
      "390929238\n",
      "391032362\n",
      "391701312\n",
      "392775865\n",
      "408602527\n",
      "408945155\n",
      "416480721\n",
      "417549814\n",
      "426112861\n",
      "428453920\n",
      "428865461\n",
      "428942240\n",
      "429102058\n",
      "440289420\n",
      "440518695\n",
      "445700898\n",
      "445715275\n",
      "450163346\n",
      "453136797\n",
      "458794912\n",
      "470309381\n",
      "470318054\n",
      "470617175\n",
      "55244346\n",
      "645880033\n",
      "646535231\n",
      "646535555\n",
      "648359612\n",
      "66856150\n",
      "702497331\n",
      "722391480\n",
      "72364061\n",
      "72621014\n",
      "72941677\n",
      "81913475\n",
      "81914898\n",
      "82242456\n",
      "8306677\n",
      "8618162\n",
      "100014010\n",
      "103580980\n",
      "103686920\n",
      "103693019\n",
      "117273166\n",
      "117415646\n",
      "138505483\n",
      "138580742\n",
      "138652182\n",
      "139402175\n",
      "141129657\n",
      "142504392\n",
      "142586532\n",
      "142615793\n",
      "142751024\n",
      "142793816\n",
      "142905711\n",
      "142940385\n",
      "142946146\n",
      "147577203\n",
      "147607082\n",
      "147608359\n",
      "147613199\n",
      "147643683\n",
      "147879328\n",
      "147891533\n",
      "147936860\n",
      "147953053\n",
      "147992932\n",
      "148840679\n",
      "148878206\n",
      "148912403\n",
      "149918668\n",
      "149928365\n",
      "150185453\n",
      "150387303\n",
      "154491644\n",
      "154565606\n",
      "154565671\n",
      "156199496\n",
      "157329771\n",
      "158436739\n",
      "159528102\n",
      "198489041\n",
      "198490597\n",
      "198507608\n",
      "229536624\n",
      "229549096\n",
      "232521190\n",
      "232523409\n",
      "236875418\n",
      "236996487\n",
      "256925744\n",
      "257048642\n",
      "286689852\n",
      "287271053\n",
      "302654026\n",
      "302751409\n",
      "318232411\n",
      "331941912\n",
      "341687229\n",
      "341707278\n",
      "355920995\n",
      "356743150\n",
      "357304255\n",
      "3755369\n",
      "417839473\n",
      "459220068\n",
      "459223686\n",
      "459765239\n",
      "4753720\n",
      "56861756\n",
      "82203007\n",
      "86297890\n",
      "86371589\n",
      "243279213\n",
      "243297665\n",
      "243332737\n",
      "243338648\n",
      "256003019\n",
      "256323002\n",
      "256517026\n",
      "257062162\n",
      "257311867\n",
      "257337256\n",
      "257495677\n",
      "257649620\n",
      "257652267\n",
      "257731334\n",
      "257732381\n",
      "258278814\n",
      "258799833\n",
      "258801436\n",
      "258801882\n",
      "258830281\n",
      "258870043\n",
      "258873063\n",
      "259166970\n",
      "259167514\n",
      "259171655\n",
      "259172309\n",
      "259235315\n",
      "259238257\n",
      "262970987\n",
      "264105265\n",
      "264295634\n",
      "264309181\n",
      "267542959\n",
      "268055518\n",
      "268393769\n",
      "269698493\n",
      "269700065\n",
      "270279719\n",
      "270401297\n",
      "272678898\n",
      "272760235\n",
      "274313770\n",
      "274369981\n",
      "274483823\n",
      "274510104\n",
      "274551673\n",
      "274578622\n",
      "274696298\n",
      "274977360\n",
      "275431073\n",
      "275691083\n",
      "275693332\n",
      "27698470\n",
      "27851503\n",
      "27896467\n",
      "279916748\n",
      "279919785\n",
      "279980795\n",
      "279983256\n",
      "28120979\n",
      "284269216\n",
      "284299200\n",
      "284479531\n",
      "284901798\n",
      "284904268\n",
      "284971587\n",
      "285013251\n",
      "287151572\n",
      "288107287\n",
      "288129762\n",
      "288269394\n",
      "288345799\n",
      "288601064\n",
      "288631694\n",
      "288634469\n",
      "289250717\n",
      "289372185\n",
      "289458389\n",
      "289623768\n",
      "289722757\n",
      "298600026\n",
      "298646251\n",
      "298646738\n",
      "298733302\n",
      "298786750\n",
      "299027101\n",
      "299090842\n",
      "307957728\n",
      "307987417\n",
      "308068654\n",
      "308071336\n",
      "308358156\n",
      "308360391\n",
      "311234107\n",
      "311236539\n",
      "313591036\n",
      "313738945\n",
      "314590103\n",
      "315722110\n",
      "315757666\n",
      "316599863\n",
      "320499054\n",
      "321693772\n",
      "323141780\n",
      "326209848\n",
      "329249647\n",
      "329288972\n",
      "329343346\n",
      "333731555\n",
      "336123695\n",
      "336260861\n",
      "341873554\n",
      "350696291\n",
      "350992465\n",
      "351679665\n",
      "351683820\n",
      "352015266\n",
      "352238969\n",
      "353870041\n",
      "353988894\n",
      "356015528\n",
      "356227278\n",
      "356341022\n",
      "356822358\n",
      "356895717\n",
      "356917682\n",
      "356920361\n",
      "357099140\n",
      "357626823\n",
      "357686750\n",
      "357794935\n",
      "359312744\n",
      "359389925\n",
      "359393651\n",
      "359415582\n",
      "359495992\n",
      "359585210\n",
      "359631482\n",
      "359631862\n",
      "359678852\n",
      "360019461\n",
      "362214969\n",
      "362217268\n",
      "362256906\n",
      "364119739\n",
      "366119193\n",
      "366121063\n",
      "366517273\n",
      "366562920\n",
      "366577748\n",
      "367681857\n",
      "367855443\n",
      "368205669\n",
      "376847833\n",
      "376978329\n",
      "376991612\n",
      "377103029\n",
      "377253895\n",
      "377290392\n",
      "377293721\n",
      "377304036\n",
      "377728146\n",
      "383648451\n",
      "383722536\n",
      "390019727\n",
      "390971446\n",
      "390973110\n",
      "394010139\n",
      "39515646\n",
      "39572110\n",
      "39573593\n",
      "399821713\n",
      "399911452\n",
      "400299432\n",
      "403332472\n",
      "405682574\n",
      "405687343\n",
      "406929779\n",
      "420130844\n",
      "420898865\n",
      "421331159\n",
      "421335690\n",
      "422989548\n",
      "424384056\n",
      "424438718\n",
      "424438735\n",
      "424731804\n",
      "441720643\n",
      "441721258\n",
      "441731954\n",
      "441737748\n",
      "441762590\n",
      "441765527\n",
      "441792937\n",
      "441809619\n",
      "458460152\n",
      "458460656\n",
      "459968655\n",
      "459970528\n",
      "459984491\n",
      "460002894\n",
      "460005263\n",
      "460008161\n",
      "460058514\n",
      "462615949\n",
      "467183071\n",
      "470085803\n",
      "470680611\n",
      "471012022\n",
      "47626559\n",
      "47628187\n",
      "47677211\n",
      "47734697\n",
      "47818814\n",
      "47819290\n",
      "47974149\n",
      "48025487\n",
      "75655116\n",
      "75834963\n",
      "75940695\n",
      "7718479\n",
      "7856690\n",
      "7857339\n",
      "7902438\n",
      "82406608\n",
      "85461853\n",
      "85462594\n",
      "88893483\n",
      "9527682\n",
      "9594062\n",
      "9732196\n",
      "1359477\n",
      "2490776\n",
      "5504732\n",
      "11568274\n",
      "12099680\n",
      "12421108\n",
      "14162049\n",
      "17762630\n",
      "24823159\n",
      "29477537\n",
      "30318046\n",
      "31869878\n",
      "32293314\n",
      "32588098\n",
      "32927362\n",
      "33626362\n",
      "33883331\n",
      "35099470\n",
      "35119312\n",
      "36492008\n",
      "37909674\n",
      "38589392\n",
      "41956486\n",
      "46626131\n",
      "47956260\n",
      "49319489\n",
      "50379749\n",
      "52382500\n",
      "55664733\n",
      "56649881\n",
      "60241889\n",
      "61754377\n",
      "62480238\n",
      "63840400\n",
      "65414679\n",
      "65418092\n",
      "66424980\n",
      "74195235\n",
      "74885707\n",
      "77893613\n",
      "79647439\n",
      "80374127\n",
      "80466845\n",
      "81793226\n",
      "82109064\n",
      "88328971\n",
      "91037668\n",
      "92625873\n",
      "92655287\n",
      "96142134\n",
      "97410755\n",
      "100325374\n",
      "101176518\n",
      "101496204\n",
      "107464225\n",
      "111153842\n",
      "111269865\n",
      "113126621\n",
      "118327563\n",
      "118327615\n",
      "122577745\n",
      "122613547\n",
      "123405803\n",
      "133566240\n",
      "139356508\n",
      "140598047\n",
      "142084327\n",
      "143926220\n",
      "144384638\n",
      "144444811\n",
      "144449373\n",
      "149124218\n",
      "149970599\n",
      "152272005\n",
      "152513306\n",
      "152963553\n",
      "153350828\n",
      "155310418\n",
      "156088295\n",
      "160037799\n",
      "160038554\n",
      "160192279\n",
      "161223691\n",
      "161378663\n",
      "166523628\n",
      "166840700\n",
      "167249549\n",
      "168271268\n",
      "168936825\n",
      "169174944\n",
      "170750192\n",
      "175317011\n",
      "178375262\n",
      "178481706\n",
      "178734769\n",
      "178876459\n",
      "179369863\n",
      "179492666\n",
      "180984779\n",
      "184550163\n",
      "186286366\n",
      "191347420\n",
      "197733487\n",
      "200323039\n",
      "201514183\n",
      "201792305\n",
      "204418559\n",
      "206383927\n",
      "206598104\n",
      "211408248\n",
      "213841827\n",
      "218966627\n",
      "218972787\n",
      "219990365\n",
      "220122635\n",
      "220440289\n",
      "229067517\n",
      "229112341\n",
      "229113190\n",
      "231013653\n",
      "231289833\n",
      "231849334\n",
      "231908470\n",
      "231941105\n",
      "234292288\n",
      "234338417\n",
      "237311777\n",
      "238019745\n",
      "238174284\n",
      "238829802\n",
      "238831290\n",
      "241855882\n",
      "242961467\n",
      "248614881\n",
      "251860194\n",
      "255688269\n",
      "259901709\n",
      "262586271\n",
      "262652975\n",
      "262721265\n",
      "263076386\n",
      "264767366\n",
      "265170645\n",
      "265566881\n",
      "266680732\n",
      "267093537\n",
      "268804470\n",
      "271553613\n",
      "276003665\n",
      "278056429\n",
      "278778981\n",
      "278831460\n",
      "279643499\n",
      "281543210\n",
      "283910982\n",
      "289593953\n",
      "291309218\n",
      "293975366\n",
      "295150789\n",
      "300206088\n",
      "306632409\n",
      "308209781\n",
      "311085703\n",
      "318929071\n",
      "321043837\n",
      "321298673\n",
      "321978323\n",
      "326092506\n",
      "331105618\n",
      "332911680\n",
      "335588842\n",
      "342208067\n",
      "348840436\n",
      "349965963\n",
      "355209666\n",
      "360287375\n",
      "366574791\n",
      "370007119\n",
      "374238746\n",
      "375632035\n",
      "379741183\n",
      "382199441\n",
      "383440463\n",
      "383517469\n",
      "385229393\n",
      "386025523\n",
      "386463375\n",
      "388205305\n",
      "389661615\n",
      "390159231\n",
      "394565540\n",
      "398772308\n",
      "399577123\n",
      "400321253\n",
      "401842326\n",
      "403207877\n",
      "406277413\n",
      "408037229\n",
      "409318512\n",
      "410407161\n",
      "410872370\n",
      "416674665\n",
      "420014358\n",
      "423497748\n",
      "425999468\n",
      "428698984\n",
      "436703420\n",
      "437251349\n",
      "439609864\n",
      "441462308\n",
      "444004795\n",
      "444039739\n",
      "445325886\n",
      "446368071\n",
      "447174309\n",
      "447692277\n",
      "448295118\n",
      "452980078\n",
      "453057297\n",
      "454718065\n",
      "455209704\n",
      "458584383\n",
      "469970443\n",
      "842068824\n",
      "1254504863\n",
      "86373256\n",
      "86374671\n",
      "91987762\n",
      "99899503\n",
      "99903855\n",
      "11908624\n",
      "137810570\n",
      "138847344\n",
      "138974500\n",
      "139110691\n",
      "141159963\n",
      "141859885\n",
      "141861849\n",
      "142276979\n",
      "142302078\n",
      "144311900\n",
      "144334378\n",
      "14826027\n",
      "148968233\n",
      "150342503\n",
      "150384768\n",
      "150387080\n",
      "154067566\n",
      "154068106\n",
      "154091402\n",
      "154092440\n",
      "156462252\n",
      "156513162\n",
      "157272202\n",
      "157328271\n",
      "159158728\n",
      "159548152\n",
      "159570515\n",
      "159634426\n",
      "165373714\n",
      "172601319\n",
      "17655496\n",
      "18066482\n",
      "18907019\n",
      "18908649\n",
      "198517856\n",
      "202351609\n",
      "202407182\n",
      "202505374\n",
      "202511282\n",
      "219017071\n",
      "224301589\n",
      "229537172\n",
      "233176133\n",
      "233192899\n",
      "233638712\n",
      "241197867\n",
      "257046388\n",
      "284063057\n",
      "284185480\n",
      "284626874\n",
      "290991351\n",
      "309998624\n",
      "310994603\n",
      "313276541\n",
      "316258792\n",
      "316332568\n",
      "328818360\n",
      "341687736\n",
      "341705749\n",
      "355895910\n",
      "376687723\n",
      "3813484\n",
      "386956587\n",
      "392402786\n",
      "393834361\n",
      "393887416\n",
      "416576220\n",
      "417937171\n",
      "53482470\n",
      "55753112\n",
      "55778419\n",
      "77038207\n",
      "82264031\n",
      "86263835\n",
      "9376853\n",
      "950226540\n",
      "97487520\n",
      "99330098\n",
      "1001271887\n",
      "116483418\n",
      "135171752\n",
      "154271808\n",
      "155944347\n",
      "157987932\n",
      "158004215\n",
      "158017717\n",
      "158025433\n",
      "158085955\n",
      "158513979\n",
      "158533814\n",
      "158534596\n",
      "158590520\n",
      "158617252\n",
      "159613699\n",
      "159634470\n",
      "159636125\n",
      "159880411\n",
      "161725194\n",
      "165628502\n",
      "165944402\n",
      "166127571\n",
      "166150157\n",
      "166175318\n",
      "168699450\n",
      "198111321\n",
      "198147416\n",
      "202444813\n",
      "202467266\n",
      "202491864\n",
      "219824182\n",
      "22953415\n",
      "230062302\n",
      "232531805\n",
      "232539420\n",
      "235569137\n",
      "23747173\n",
      "258060413\n",
      "267821182\n",
      "27419328\n",
      "27420275\n",
      "27488593\n",
      "275628557\n",
      "28129850\n",
      "282923232\n",
      "282940614\n",
      "284266925\n",
      "288454180\n",
      "288487836\n",
      "298165722\n",
      "309761790\n",
      "310416088\n",
      "332298341\n",
      "335682016\n",
      "367854515\n",
      "393012276\n",
      "399167691\n",
      "424902992\n",
      "43138859\n",
      "441661319\n",
      "441704810\n",
      "441708734\n",
      "458454721\n",
      "67685553\n",
      "88171518\n",
      "88221336\n",
      "116361759\n",
      "116381609\n",
      "155942294\n",
      "155944028\n",
      "157913697\n",
      "159873506\n",
      "159873510\n",
      "161732839\n",
      "161822789\n",
      "165305498\n",
      "165637640\n",
      "165689215\n",
      "193972797\n",
      "193974521\n",
      "198317043\n",
      "198516246\n",
      "198516558\n",
      "202511362\n",
      "207498328\n",
      "229495564\n",
      "230197530\n",
      "230200871\n",
      "235555211\n",
      "235559003\n",
      "236930870\n",
      "236994942\n",
      "256560812\n",
      "256865677\n",
      "259167997\n",
      "272759725\n",
      "284266496\n",
      "286231983\n",
      "286899460\n",
      "305255878\n",
      "310097688\n",
      "311114484\n",
      "313403048\n",
      "343264261\n",
      "343267593\n",
      "350071082\n",
      "356632512\n",
      "372640192\n",
      "387949640\n",
      "387996318\n",
      "458484848\n",
      "467252619\n",
      "9037655\n",
      "9105870\n",
      "161839973\n",
      "162589307\n",
      "198184659\n",
      "198381280\n",
      "207435670\n",
      "207438516\n",
      "207463697\n",
      "207466671\n",
      "207495585\n",
      "207500374\n",
      "219894314\n",
      "229487154\n",
      "229639494\n",
      "230016097\n",
      "230086252\n",
      "232675523\n",
      "233059682\n",
      "233076309\n",
      "233193964\n",
      "235674496\n",
      "236935277\n",
      "237117314\n",
      "256429034\n",
      "256502729\n",
      "256584622\n",
      "258550164\n",
      "265311348\n",
      "269665934\n",
      "288469691\n",
      "298647682\n",
      "321448418\n",
      "321818578\n",
      "329153706\n",
      "329153952\n",
      "333804388\n",
      "353817853\n",
      "366487679\n",
      "367838634\n",
      "387412503\n",
      "387527611\n",
      "387757610\n",
      "387897228\n",
      "403114672\n",
      "422426637\n",
      "441766783\n",
      "10267410\n",
      "10290407\n",
      "10584477\n",
      "115507598\n",
      "115521476\n",
      "116163178\n",
      "116264519\n",
      "1201301825\n",
      "120182990\n",
      "120320470\n",
      "122835046\n",
      "122839894\n",
      "122886449\n",
      "122955724\n",
      "123014780\n",
      "123200196\n",
      "123234892\n",
      "123315747\n",
      "123317865\n",
      "123362819\n",
      "123418227\n",
      "123489614\n",
      "1400086045\n",
      "1400844051\n",
      "1400932254\n",
      "1400932256\n",
      "154699543\n",
      "1551775641\n",
      "156509985\n",
      "157519187\n",
      "157550216\n",
      "157765888\n",
      "157953005\n",
      "158014053\n",
      "158213644\n",
      "158486942\n",
      "158562424\n",
      "158661934\n",
      "159242660\n",
      "159420083\n",
      "159501196\n",
      "159502314\n",
      "159539963\n",
      "159818179\n",
      "159889606\n",
      "160422180\n",
      "160494025\n",
      "160519639\n",
      "160520539\n",
      "164407868\n",
      "164528404\n",
      "164655739\n",
      "165497968\n",
      "165500081\n",
      "165530220\n",
      "165531689\n",
      "165614600\n",
      "166409655\n",
      "1715686794\n",
      "180808443\n",
      "18178958\n",
      "18313610\n",
      "18430841\n",
      "18562934\n",
      "188665416\n",
      "188728924\n",
      "188774390\n",
      "188780483\n",
      "193602730\n",
      "193626645\n",
      "193629837\n",
      "193799560\n",
      "193869952\n",
      "193945921\n",
      "198178315\n",
      "198179478\n",
      "198181264\n",
      "198183483\n",
      "198186255\n",
      "198207384\n",
      "198208960\n",
      "198238279\n",
      "198355046\n",
      "198361902\n",
      "198363464\n",
      "198384873\n",
      "198390699\n",
      "198458462\n",
      "198560607\n",
      "198579888\n",
      "198616233\n",
      "199657492\n",
      "199661616\n",
      "199682037\n",
      "199686300\n",
      "199687346\n",
      "199714470\n",
      "20355983\n",
      "20526383\n",
      "20527176\n",
      "207497136\n",
      "21020128\n",
      "21031484\n",
      "21226833\n",
      "21227177\n",
      "21282848\n",
      "21830017\n",
      "21834174\n",
      "219083932\n",
      "219734214\n",
      "219759991\n",
      "219765149\n",
      "219766122\n",
      "219790061\n",
      "219796205\n",
      "219799053\n",
      "219804982\n",
      "219812640\n",
      "219846425\n",
      "219853425\n",
      "219867604\n",
      "219871477\n",
      "219872479\n",
      "219877628\n",
      "219880693\n",
      "219884807\n",
      "219898374\n",
      "219899466\n",
      "219899885\n",
      "224600346\n",
      "229401846\n",
      "229449680\n",
      "229462143\n",
      "229463661\n",
      "229482822\n",
      "229500092\n",
      "229500593\n",
      "229538073\n",
      "229585587\n",
      "229587435\n",
      "229592273\n",
      "229612809\n",
      "229614595\n",
      "229645654\n",
      "229675164\n",
      "229683264\n",
      "229689988\n",
      "229715869\n",
      "229736577\n",
      "229738220\n",
      "229780215\n",
      "229788448\n",
      "229790356\n",
      "229942198\n",
      "229953506\n",
      "229954300\n",
      "229960194\n",
      "229961049\n",
      "229971840\n",
      "230005218\n",
      "230022689\n",
      "230118997\n",
      "230119606\n",
      "230123190\n",
      "230281715\n",
      "230299080\n",
      "230379704\n",
      "232623692\n",
      "232635950\n",
      "232643401\n",
      "232647016\n",
      "232672291\n",
      "232982793\n",
      "233007430\n",
      "233046979\n",
      "233048527\n",
      "233078994\n",
      "233080272\n",
      "233094862\n",
      "233161073\n",
      "233197293\n",
      "233206727\n",
      "23331223\n",
      "233498747\n",
      "233501543\n",
      "233522081\n",
      "233524710\n",
      "233529388\n",
      "233544259\n",
      "233573947\n",
      "233577721\n",
      "233580734\n",
      "233614873\n",
      "233617031\n",
      "233627515\n",
      "233630379\n",
      "233631664\n",
      "233657619\n",
      "233660303\n",
      "233713375\n",
      "233720115\n",
      "233725247\n",
      "233728330\n",
      "233736604\n",
      "233742297\n",
      "233743948\n",
      "23395197\n",
      "235901187\n",
      "235938879\n",
      "235944022\n",
      "235990781\n",
      "236002029\n",
      "236764295\n",
      "236781593\n",
      "236815784\n",
      "236816540\n",
      "237109014\n",
      "237124114\n",
      "237127349\n",
      "237183029\n",
      "237185371\n",
      "237278147\n",
      "237287990\n",
      "237303828\n",
      "243270667\n",
      "243274508\n",
      "24327522\n",
      "101452688\n",
      "101735431\n",
      "101822460\n",
      "101845280\n",
      "113414697\n",
      "113534545\n",
      "114137230\n",
      "118056636\n",
      "118139893\n",
      "118398402\n",
      "118799051\n",
      "119044273\n",
      "119088713\n",
      "119159743\n",
      "119159758\n",
      "119339602\n",
      "119433661\n",
      "119501687\n",
      "119725938\n",
      "120063021\n",
      "128796312\n",
      "140576341\n",
      "140595583\n",
      "140609529\n",
      "140609648\n",
      "140760669\n",
      "140761131\n",
      "141028987\n",
      "141088762\n",
      "141094652\n",
      "141156374\n",
      "141473227\n",
      "141484055\n",
      "141485974\n",
      "141545444\n",
      "141685041\n",
      "141686135\n",
      "141824889\n",
      "141867895\n",
      "141871652\n",
      "141979739\n",
      "142018995\n",
      "142052474\n",
      "142081674\n",
      "142084306\n",
      "143257772\n",
      "143357151\n",
      "143363202\n",
      "143514028\n",
      "143610093\n",
      "143612479\n",
      "149037077\n",
      "149060376\n",
      "149156139\n",
      "150101862\n",
      "150110102\n",
      "150188663\n",
      "150191263\n",
      "150322938\n",
      "150357290\n",
      "150358058\n",
      "150389364\n",
      "150433499\n",
      "161030195\n",
      "166204968\n",
      "166465117\n",
      "166551340\n",
      "167039826\n",
      "167165755\n",
      "167169529\n",
      "167246821\n",
      "167309408\n",
      "167339031\n",
      "167344043\n",
      "167548779\n",
      "167550132\n",
      "167551926\n",
      "167692491\n",
      "167695253\n",
      "167721618\n",
      "167724880\n",
      "167751394\n",
      "167797444\n",
      "167809450\n",
      "167889480\n",
      "167891658\n",
      "167891889\n",
      "168440985\n",
      "169257502\n",
      "176871306\n",
      "176876294\n",
      "176936051\n",
      "176980573\n",
      "177020835\n",
      "177032968\n",
      "177034213\n",
      "177077189\n",
      "177079117\n",
      "177160805\n",
      "177162802\n",
      "177163343\n",
      "177164485\n",
      "177171311\n",
      "177239551\n",
      "177258667\n",
      "177282218\n",
      "177285937\n",
      "177309966\n",
      "177350315\n",
      "177350471\n",
      "177385907\n",
      "179214048\n",
      "180413022\n",
      "181571940\n",
      "182012304\n",
      "182074579\n",
      "182650515\n",
      "183076970\n",
      "183306276\n",
      "183978683\n",
      "183981635\n",
      "198079646\n",
      "198081719\n",
      "201601338\n",
      "21601170\n",
      "218911769\n",
      "219280595\n",
      "219280858\n",
      "219926866\n",
      "219945452\n",
      "219962998\n",
      "220367118\n",
      "220374696\n",
      "220479047\n",
      "22098070\n",
      "22576749\n",
      "22892207\n",
      "230968422\n",
      "231074642\n",
      "231089705\n",
      "231091565\n",
      "231093936\n",
      "231742789\n",
      "23213706\n",
      "238191506\n",
      "238196354\n",
      "238200877\n",
      "238201418\n",
      "238229711\n",
      "24209942\n",
      "24496505\n",
      "246688683\n",
      "24692609\n",
      "25078422\n",
      "25118689\n",
      "25119324\n",
      "25132088\n",
      "25132517\n",
      "25133152\n",
      "25152923\n",
      "253806065\n",
      "253979617\n",
      "253985144\n",
      "254079940\n",
      "254118804\n",
      "254235597\n",
      "254235775\n",
      "254235882\n",
      "255762764\n",
      "256214240\n",
      "256241316\n",
      "257772669\n",
      "259901124\n",
      "260298118\n",
      "260356180\n",
      "260476635\n",
      "260502638\n",
      "260507815\n",
      "260608609\n",
      "260640043\n",
      "260654514\n",
      "260659602\n",
      "260709665\n",
      "261059696\n",
      "261139108\n",
      "261205462\n",
      "261263316\n",
      "261419829\n",
      "261522877\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "261563358\n",
      "261744725\n",
      "262574104\n",
      "262576518\n",
      "262576636\n",
      "262614797\n",
      "262721753\n",
      "262866776\n",
      "263012764\n",
      "265332741\n",
      "265467432\n",
      "267194398\n",
      "267363765\n",
      "269378599\n",
      "269849513\n",
      "269898810\n",
      "270247428\n",
      "270275278\n",
      "270276558\n",
      "270312035\n",
      "270312112\n",
      "270342707\n",
      "270505202\n",
      "270558473\n",
      "271639087\n",
      "271723952\n",
      "271725220\n",
      "271795775\n",
      "271810226\n",
      "271810257\n",
      "271971704\n",
      "271999852\n",
      "272087003\n",
      "272188971\n",
      "272238399\n",
      "272434319\n",
      "272472265\n",
      "272473053\n",
      "272564718\n",
      "273395661\n",
      "273654759\n",
      "273654781\n",
      "273790685\n",
      "276568546\n",
      "276738707\n",
      "276783657\n",
      "276845678\n",
      "276963913\n",
      "276965481\n",
      "277045346\n",
      "277099881\n",
      "277147766\n",
      "277891592\n",
      "277941517\n",
      "277978007\n",
      "278002790\n",
      "278022845\n",
      "278139052\n",
      "278267286\n",
      "278287749\n",
      "278385856\n",
      "278409392\n",
      "278413697\n",
      "278544653\n",
      "278589939\n",
      "278632192\n",
      "278684936\n",
      "278724765\n",
      "278777070\n",
      "278822780\n",
      "278897282\n",
      "278898478\n",
      "278990892\n",
      "278991552\n",
      "279051289\n",
      "279245231\n",
      "279322995\n",
      "279324400\n",
      "279355764\n",
      "279431010\n",
      "279475851\n",
      "280050415\n",
      "280052157\n",
      "280910319\n",
      "281578420\n",
      "281924463\n",
      "281976620\n",
      "282272775\n",
      "287532056\n",
      "287588629\n",
      "287591034\n",
      "287640232\n",
      "287721776\n",
      "287722370\n",
      "287870438\n",
      "287873287\n",
      "287874075\n",
      "290268464\n",
      "290289095\n",
      "290289792\n",
      "290303745\n",
      "290305748\n",
      "290350107\n",
      "290352455\n",
      "290405966\n",
      "291374558\n",
      "292293385\n",
      "292473139\n",
      "292747868\n",
      "293150658\n",
      "293221526\n",
      "293328926\n",
      "293439179\n",
      "293527927\n",
      "293580950\n",
      "293654389\n",
      "293663780\n",
      "293664831\n",
      "293795606\n",
      "293935281\n",
      "293937699\n",
      "293975350\n",
      "293975385\n",
      "294051897\n",
      "294064306\n",
      "294065435\n",
      "294093828\n",
      "294205251\n",
      "294274829\n",
      "294395913\n",
      "294399290\n",
      "294437492\n",
      "294679419\n",
      "294680417\n",
      "294753197\n",
      "29759308\n",
      "29781098\n",
      "29833036\n",
      "299779198\n",
      "299803617\n",
      "299892053\n",
      "299892185\n",
      "299945049\n",
      "299945796\n",
      "300033719\n",
      "300082027\n",
      "300086670\n",
      "300137971\n",
      "300153494\n",
      "300216362\n",
      "300283476\n",
      "300290025\n",
      "300329283\n",
      "300329841\n",
      "300329883\n",
      "300354611\n",
      "300402826\n",
      "300443831\n",
      "300511872\n",
      "300601518\n",
      "300710871\n",
      "300745616\n",
      "300745939\n",
      "300746125\n",
      "300808529\n",
      "300969559\n",
      "301456200\n",
      "301683643\n",
      "301845636\n",
      "30185831\n",
      "30275847\n",
      "302968162\n",
      "30313007\n",
      "30321776\n",
      "303532233\n",
      "303951511\n",
      "304054005\n",
      "30407196\n",
      "304408387\n",
      "304474212\n",
      "304474960\n",
      "304707674\n",
      "304850940\n",
      "304857000\n",
      "304898606\n",
      "304898997\n",
      "305517882\n",
      "305932274\n",
      "305950212\n",
      "306009036\n",
      "30631031\n",
      "30640365\n",
      "306459744\n",
      "306575297\n",
      "306576588\n",
      "306631660\n",
      "306643277\n",
      "306724702\n",
      "306738667\n",
      "306741000\n",
      "306742226\n",
      "306772411\n",
      "306772814\n",
      "306790702\n",
      "306897688\n",
      "306931243\n",
      "307036514\n",
      "307291298\n",
      "30731175\n",
      "307326728\n",
      "30762159\n",
      "309433961\n",
      "309618198\n",
      "309650507\n",
      "309735209\n",
      "30985620\n",
      "309894894\n",
      "310802243\n",
      "310856670\n",
      "311103813\n",
      "311250324\n",
      "311419979\n",
      "311427511\n",
      "311862550\n",
      "31310929\n",
      "31382876\n",
      "313843907\n",
      "314200178\n",
      "314828080\n",
      "315082049\n",
      "315765334\n",
      "31636802\n",
      "31636892\n",
      "31672100\n",
      "31675501\n",
      "316992415\n",
      "317021839\n",
      "317097409\n",
      "317128956\n",
      "317183847\n",
      "317245802\n",
      "317297604\n",
      "317382479\n",
      "31799296\n",
      "318518150\n",
      "318566466\n",
      "318567783\n",
      "31868634\n",
      "31870020\n",
      "31943880\n",
      "31946252\n",
      "319865847\n",
      "319901419\n",
      "31997926\n",
      "32000654\n",
      "320356995\n",
      "32041567\n",
      "320483119\n",
      "320530807\n",
      "320779634\n",
      "32152757\n",
      "32154120\n",
      "322284262\n",
      "322307043\n",
      "322902122\n",
      "322902400\n",
      "322951856\n",
      "323135166\n",
      "323242740\n",
      "323427335\n",
      "323427861\n",
      "323443291\n",
      "323463062\n",
      "323681928\n",
      "323682182\n",
      "323684268\n",
      "323685038\n",
      "323760383\n",
      "323816794\n",
      "323970416\n",
      "324654261\n",
      "325078530\n",
      "325279192\n",
      "325341129\n",
      "325490376\n",
      "326693475\n",
      "327671979\n",
      "337198672\n",
      "33732997\n",
      "337552445\n",
      "33910256\n",
      "339601581\n",
      "339672586\n",
      "339768429\n",
      "339855952\n",
      "339892193\n",
      "340004035\n",
      "340006554\n",
      "340058142\n",
      "340060373\n",
      "340139796\n",
      "340140446\n",
      "340178535\n",
      "340205734\n",
      "340217261\n",
      "340460526\n",
      "340557839\n",
      "340788022\n",
      "340970020\n",
      "341119264\n",
      "341423502\n",
      "344128598\n",
      "344132084\n",
      "344555655\n",
      "344586455\n",
      "346721644\n",
      "348762900\n",
      "348771843\n",
      "348895477\n",
      "348895694\n",
      "348957284\n",
      "349055606\n",
      "349096682\n",
      "349097708\n",
      "349152250\n",
      "349155856\n",
      "349191509\n",
      "349196417\n",
      "349308244\n",
      "349411828\n",
      "349413521\n",
      "349972048\n",
      "349992543\n",
      "350037805\n",
      "350137597\n",
      "350432064\n",
      "351246778\n",
      "351346904\n",
      "351476241\n",
      "351531460\n",
      "351555777\n",
      "351602312\n",
      "352290769\n",
      "352403588\n",
      "357609505\n",
      "358180887\n",
      "360914816\n",
      "360960073\n",
      "363404187\n",
      "364064572\n",
      "364268760\n",
      "364269796\n",
      "364305803\n",
      "364392241\n",
      "364423314\n",
      "365363283\n",
      "365892544\n",
      "369327273\n",
      "369370220\n",
      "369867255\n",
      "369875198\n",
      "369934178\n",
      "370038077\n",
      "370038896\n",
      "370227522\n",
      "370235131\n",
      "370327024\n",
      "371839042\n",
      "372223132\n",
      "372851675\n",
      "373598109\n",
      "373919592\n",
      "375057606\n",
      "375063426\n",
      "375270451\n",
      "376669425\n",
      "376776708\n",
      "376777888\n",
      "379191982\n",
      "379241484\n",
      "379356723\n",
      "380397303\n",
      "380780014\n",
      "380829210\n",
      "381975295\n",
      "382045178\n",
      "382148635\n",
      "382304847\n",
      "382310805\n",
      "382311655\n",
      "382436629\n",
      "382625480\n",
      "382628610\n",
      "383390913\n",
      "383428987\n",
      "384065528\n",
      "384158737\n",
      "384272088\n",
      "384341508\n",
      "384509997\n",
      "384604806\n",
      "38468621\n",
      "384740598\n",
      "384800000\n",
      "38509826\n",
      "38570890\n",
      "38631800\n",
      "38679633\n",
      "387191191\n",
      "387242413\n",
      "388130067\n",
      "388205924\n",
      "38876469\n",
      "389436396\n",
      "389440520\n",
      "389870267\n",
      "390142065\n",
      "390142066\n",
      "390563365\n",
      "390721620\n",
      "391904443\n",
      "391905294\n",
      "391922780\n",
      "391923445\n",
      "391949122\n",
      "394288878\n",
      "394341901\n",
      "394343336\n",
      "394350184\n",
      "394359805\n",
      "394731585\n",
      "394757522\n",
      "394812275\n",
      "394814495\n",
      "394822411\n",
      "395134061\n",
      "397150195\n",
      "397317363\n",
      "397318377\n",
      "398383265\n",
      "401625800\n",
      "401774896\n",
      "404030697\n",
      "404057144\n",
      "404119542\n",
      "404342830\n",
      "404606746\n",
      "404733023\n",
      "404851508\n",
      "404851552\n",
      "404851966\n",
      "404934011\n",
      "40602499\n",
      "406091286\n",
      "406098128\n",
      "406864355\n",
      "406943526\n",
      "406971913\n",
      "407090820\n",
      "407125980\n",
      "407221104\n",
      "407615704\n",
      "407882727\n",
      "407882752\n",
      "409934386\n",
      "409951060\n",
      "410087746\n",
      "410227751\n",
      "410255090\n",
      "41033344\n",
      "410339095\n",
      "410344104\n",
      "410357914\n",
      "410446402\n",
      "410446514\n",
      "412010806\n",
      "41256189\n",
      "41337967\n",
      "41529189\n",
      "419611478\n",
      "419636456\n",
      "419735332\n",
      "424880132\n",
      "425760313\n",
      "431481574\n",
      "431589453\n",
      "441248310\n",
      "441261072\n",
      "446698252\n",
      "451568169\n",
      "451592612\n",
      "453080466\n",
      "453095637\n",
      "453101061\n",
      "464386440\n",
      "464419337\n",
      "466098383\n",
      "466128132\n",
      "466231105\n",
      "466270949\n",
      "466275299\n",
      "466685972\n",
      "466687167\n",
      "467934030\n",
      "468178599\n",
      "468180399\n",
      "468188532\n",
      "468189042\n",
      "469690525\n",
      "469872118\n",
      "469902312\n",
      "471013493\n",
      "49143782\n",
      "49399441\n",
      "50270149\n",
      "50378110\n",
      "50475082\n",
      "55401356\n",
      "55451784\n",
      "55498577\n",
      "55601400\n",
      "55653036\n",
      "60967239\n",
      "61276578\n",
      "61800047\n",
      "62345913\n",
      "62806082\n",
      "62807165\n",
      "62877421\n",
      "62988506\n",
      "63175919\n",
      "63406482\n",
      "63409608\n",
      "6470172\n",
      "74432542\n",
      "74649918\n",
      "75148991\n",
      "75687533\n",
      "76002746\n",
      "76226680\n",
      "76523836\n",
      "76809907\n",
      "76921762\n",
      "79658872\n",
      "79747954\n",
      "80016916\n",
      "86632831\n",
      "86971296\n",
      "87414808\n",
      "87422039\n",
      "87710715\n",
      "87788560\n",
      "87981179\n",
      "88609367\n",
      "88891408\n",
      "89252225\n",
      "89411931\n",
      "89667718\n",
      "89969522\n",
      "90482156\n",
      "90917481\n",
      "91411386\n",
      "91443902\n",
      "98502791\n",
      "109851914\n",
      "111551628\n",
      "116224697\n",
      "117485762\n",
      "138643670\n",
      "156139800\n",
      "1842268551\n",
      "1870244968\n",
      "216976987\n",
      "21967908\n",
      "282535014\n",
      "283330382\n",
      "28570131\n",
      "287935469\n",
      "29817056\n",
      "300121412\n",
      "304501606\n",
      "30790738\n",
      "314294022\n",
      "328684839\n",
      "351736187\n",
      "353269016\n",
      "358715097\n",
      "363030357\n",
      "364261260\n",
      "367233858\n",
      "370042412\n",
      "375796379\n",
      "385776685\n",
      "392806362\n",
      "392870236\n",
      "393320918\n",
      "394688209\n",
      "403493329\n",
      "407871234\n",
      "41206539\n",
      "41613739\n",
      "416285270\n",
      "57764624\n",
      "58685584\n",
      "69906465\n",
      "71531764\n",
      "72020292\n",
      "99216294\n",
      "100090190\n",
      "11929960\n",
      "126756648\n",
      "136402122\n",
      "136728967\n",
      "14100112\n",
      "14209654\n",
      "147685967\n",
      "15075501\n",
      "159050655\n",
      "160430992\n",
      "161273827\n",
      "163364757\n",
      "163367359\n",
      "166858124\n",
      "16740282\n",
      "16946453\n",
      "170192996\n",
      "170653829\n",
      "185607431\n",
      "185843736\n",
      "188258751\n",
      "188655930\n",
      "194676745\n",
      "1954685032\n",
      "1958987309\n",
      "1964735315\n",
      "199376584\n",
      "202685576\n",
      "202750246\n",
      "230523116\n",
      "232524196\n",
      "239237342\n",
      "239591251\n",
      "243596276\n",
      "247179473\n",
      "26538131\n",
      "26541086\n",
      "26646936\n",
      "266521964\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_e, disp_n, disp_j, disp_s, disp_b]\n",
       "Index: []"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 340066802)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_e_p, disp_n_p, disp_j_p, disp_s_p, disp_b_p, maxcount, disp_e, disp_n, disp_j, disp_s, disp_b]\n",
       "Index: []"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 340066802]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_e']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.11932331611842084, max R: 1.0, max P: 0.3333333333333333\n",
      "100% recall at: 10%, threshold: 0.5050000000000545\n"
     ]
    },
    {
     "data": {
      "image/png": "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SqWiycnJrnXZbFa5XE61Wm3GXbLNTENDQ5KksbExOee61hcKBaXTaVWrVU1MTHSty2QyyufzqtfrKpfLM2pq78NSqaRGo9G1bq59mE6nVSgU1Gg0VCqVZrzv0NCQzKznZzPXPmx/NlLvfTjXZzPXPuz8bHrtw/Zns9B92PnZ9NqH7c+mvQ9XrlyparWqarV6Rvuw/dnMtQ/PJN9nsg/nyveZ7MNen818+5BjRFO/jxErV648ub85RizsGNGJY0RTUo8RF1xwgZxzC84hx4gmfo9oSvIxIpPJdP3ecir7kGNEE79HTEnyMaLXZ5NkQTY9JHVOP3sqn1i76TG00A055+qSftbMviDptyW9rfXo9M+S3n+6DY9TtWvXrpPLt956qyRpZGRkxg/+li1bdM455+jFF1/U/v37u9atXLlSV155per1etf7te3cuVPZbFZPPvmkXnrppa51Gzdu1Lp163T8+HHt3bu3a93Q0JCuueYaSdJDDz0044Bx7bXXanBwUAcOHNDhw4e71q1bt04bN27U2NiYHn744a512WxWO3c27w27Z8+eGQebq666SitWrNChQ4d08ODBrnXnnnuuLr74YlUqlRl/VjPTLbfcIqm5D6f/4F966aVas2aNnn/+eT311FNd61atWqXLL79ctVqt5z688cYblU6ntX//fh07dqxr3aZNm7R27VodPXpUIyMjXeuGh4e1bds2Ser5vtu3b1ehUNAzzzyjF154oWvd+vXrtWHDBp04cUJ79uzpWpfP57Vjxw5J0iOPPDLjL4KtW7dq+fLlOnjwoA4dOtS17vzzz9fmzZtVLpdn1JRKpXTTTc2rzPbu3TvjYH/ZZZdp9erVOnz4sJ5+uvuWOKtXr9Zll12mycnJnn/Wm2++WWamffv26eWXX+5ad9FFF+m8887TkSNHtG/fvq51y5cv19atW+Wc6/m+119/vXK5nJ566ikdOXKka92FF16oCy64QMePH9djjz3Wta5YLOq6666TJO3evXvGXzDbtm3T8PCwDh48qGeffbZr3dq1a7Vp0yaNjY1p9+7dXesymYxuuKF5r+RHH310xl9OV1xxhc466yw999xzOnDgQNe6s88+W5dccomq1WrPPyvHiKY4jhHtfcgxgmNEm0/HiBUrVmjt2rUaGhriGMHvEZL8PEbM9r4cI5r4PaJpKR8jpv+cJ51N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L3StW79+vTZs2KATJ05oz549Xevy+bx27NghSXrkkUdm/EWwdetWLV++XAcPHtShQ4e61p1//vnavHmzyuXyjJpSqZRuuql5a529e/fOONhfdtllWr16tQ4fPqynn35akvT4483JlFavXq3LLrtMk5OTPf+sN998s8xM+/bt08svv9y17qKLLtJ5552nI0eOaN++fV3rli9frq1bt8o51/N9r7/+euVyOT311FM6cuRI17oLL7xQF1xwgY4fP67HHnusa12xWNR1110nSdq9e/eMv2C2bdum4eFhHTx4UM8++2zXurVr12rTpk0aGxvT7t27u9ZlMhndcMMNkqRHH310xl9OV1xxhc466yw999xzOnDgQNe6s88+W5dccomq1WrPPyvHiKY4jhEHDx7UqlWrOEacxjGijWNEUxKPEcPDw5qYmFC9Xp/x8yhxjGjj94impXqMaDQaqtVqJ39vaeMY0cTvEU1L+Rgx/ec86ayfV5eYWUMzp6zVtK/NarFmcDGzNZq6qernnHNvnmf882o2aR51zl2xgO38mqQ/6vjSNufcQ7OM/V+S3tR6eZVz7pH53v/OO+98haSDkvSGN7xBq1evPrkunU4rn8+r0Wic/Eug3S3sXKb76mf31bf/oTl27JhGRka0ZcsWFYtF/hd3gfuQ/6FZGseIcrmskZGRk7+oc4xI7v/icow4/WNEpVLR3r17dfXVV/e8ySPHiCZ+j2haqseIEydO6KGHHjr5e8up7EOOEU38HjElyceIZ599VnfffXd71bo77rhjzltGxC2upsf0Zsep3NrYLWLTIy+pndgvOud+eJ7xY2qetfFN59zOBWznFyV9tPXyRefc2XOMfZukdnLe5pz72Hzv39n0uO2223T++eefamnAkjI6Oqpdu3ad/J8MwEfkHCEg5wgBOYfvTpw4obvuuqv9MvFNj37P3tLm1H12h5vnsbgbb04d2z4f6hVzjTWzlZq6TOXgXGN76Bw/XxA6x65Z4HYAAAAAAMA0cTQ97DQeUWhf6LXJzOa6t8mWjuXHZx3VW+cFefOdpdK5fq4pdHvK5/PzDwKWqEKhoKuuuqrrZmCAb8g5QkDOEQJyDiRLv6es/bk+b28uX5d0s5pncVwj6VuzjLu1Y/kbC9mAc+6AmX1X0gWSNswzRe/3dSwfmmXMrNLpfn+UQP+k02mtWLEi7jKA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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
